#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;

enum allname{Ton=0,Xiang,Person,Richard};

struct person
{
    int name;
    int take;
};

person allp[4];

person find(int name)
{
    for(person i:allp)
    {
        if(i.name==name)
            return i;
    }
}

//R拿走x（R不是x）
//x未拿走R
//x拿走第一个离开的人
//T拿走y（T不是y）
//y拿走z
//z拿走X（z不是X）
//X未拿P
//P未拿X
bool tiaojian()
{
    person x;
    person y;
    person z;
    person i; //焦点
    i=find(Richard);
    {
        x=find(i.take);
        if(x.take==Richard)
            return false;
    }
    i=find(Ton);
    {
        y=find(i.take);
        z=find(y.take);
        if(z.take!=Xiang)
            return false;
    }
    i=find(Xiang);
    {
        if(i.take==Person)
            return false;
    }
    i=find(Person);
    {
        if(i.take==Xiang)
            return false;
    }
    return true;
}

void output()
{
    for(person i:allp)
        cout<<i.take<<" ";
}

bool otherhave(int sub,int name) //前面的已经拿了，后面的不能再拿
{
    for(int i=0;i<sub;i++)
    {
        if(name==allp[i].take)
            return true; //其他人已经拿过了
    }
    return false;
}

void choose(int sub)
{
    for(int j=Ton;j<=Richard;j++)
    {
        if(allp[sub].name==j||otherhave(sub,j)) //自己不能拿自己，也不能和别人拿一样的
            continue;
        else
        {
            allp[sub].take=j;
            if(sub!=3)
                choose(sub+1);
            else
            {
                if(tiaojian())
                    output();
            }
        }
    }
}

int main()
{
    allp[0].name=Ton;
    allp[1].name=Xiang;
    allp[2].name=Person;
    allp[3].name=Richard;
    choose(0);
}
